Тестирование разработанной модели¶
Импортирование библиотек¶
In [4]:
# библиотека для работы с датафреймами
import pandas as pd
# библиотека для визуализации изображений и графиков
import matplotlib.pyplot as plt
# библиотека с предобученной моделью YOLO
from ultralytics import YOLO
# импортируем ранее реализованные функции
from function import get_photo, face_recognition
# библиотека для работы с изображениями
import cv2
Загрузка данных¶
Инициализируем необходимые компоненты (модель детекции, датафрейм с эмбеддингами)
In [58]:
# модель детекции
model = YOLO(r'D:\Helper\MLBazyak\homework\face_recognition\runs\detect\face_detection_v2\weights\best.pt')
# датафрейм с эмбеддингами
df = pd.read_pickle(r'D:\Helper\MLBazyak\homework\face_recognition\Module_2\Data\train.pkl')
Реализуем процедуру для вывода результатов теста
In [62]:
def test_case_output(img_path: str, model: YOLO = model, df: pd.DataFrame = df):
# получаем кроп лица
face, path = get_photo(img_path, model)
# получаем результат распознавания
similar, name, path, out_path = face_recognition(face, path, df)
# визуализируем результат
img_input = cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB)
img_out = cv2.cvtColor(cv2.imread(out_path), cv2.COLOR_BGR2RGB)
# создаем график, состоящий из 2 картинок, входной и выходной
fig, ax = plt.subplots(1,2,figsize=(10,5))
# настраиваем первое изображение
ax[0].imshow(img_input)
ax[0].axis('off')
ax[0].set_title('Исходное изображение')
# настраиваем второе изображение
ax[1].imshow(img_out)
ax[1].axis('off')
ax[1].set_title(f'Результат\nИмя: {name}')
fig.text(0.5, -0.03, f"Сходство: {similar*100:.4f}", ha='center', fontsize=12)
plt.tight_layout()
plt.show()
Фото из интернета 1. (политики)¶
In [ ]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test1\putin.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test1\john_paul_II.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test1\bush.jfif',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Фото из интернета 2. (актеры)¶
In [27]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test2\hawn.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test2\zeta_jones.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test2\dicaprio.jpg',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Фото из интернета 3. (спортсмены)¶
In [ ]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test3\gailey.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test3\srichaphan.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test3\richt.jpg',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Дополнительно подгруженные фотографии¶
In [ ]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test4\buharov.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test4\kanin.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test4\kpss.jpg',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Тестовый датасет 1¶
In [69]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test5\Prince_Claus_0002.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test5\Amelie_Mauresmo_0012.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test5\Michael_Phelps_0002.jpg',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Тестовый датасет 2¶
In [72]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test6\Ranil_Wickremasinghe_0001.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test6\Robert_Bonner_0001.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test6\Ricardo_Lagos_0010.jpg',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Тестовый датасет 3¶
In [75]:
# тестовые фотографии
images = [
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test7\Trent_Lott_0001.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test7\Rick_Barnes_0001.jpg',
r'D:\Helper\MLBazyak\homework\face_recognition\Module_3\Data\test7\Thabo_Mbeki_0002.jpg',
]
# проходимся по каждой фотографии
for img in images:
test_case_output(img_path=img)
Рефлексия¶
Модель с большой уверенностью может распознать человека на фотографии, а также ее легко дообучить на нового человека, добавив несколько фотографий
Все тест кейсы пройдены успешно